package cn.tedu.csmall.passport.controller;


import cn.tedu.csmall.passport.pojo.dto.AdminLoginDTO;
import cn.tedu.csmall.passport.security.AdminDetails;
import cn.tedu.csmall.passport.service.IAdminService;
import cn.tedu.csmall.passport.web.JsonResult;
import lombok.extern.slf4j.Slf4j;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.core.userdetails.User;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;

/**
 * <p>
 * 管理员 前端控制器
 * </p>
 *
 * @author xBest
 * @since 2023-04-01
 */
@RestController
@RequestMapping("/admins")
@Slf4j
public class AdminController {

    @Autowired
    IAdminService adminService;

    @PostMapping("/login")
    public JsonResult login(AdminLoginDTO adminLoginDTO){
        log.debug("开始【管理员登录】请求,参数{}",adminLoginDTO);
        //TODO 具体功能待定
        String jwt =adminService.login(adminLoginDTO);
        return JsonResult.ok(jwt);
    }

    @PostMapping("/add-new")
    public String addNew() {
        return  "接收到【添加管理员】的请求，但是，服务器端尚未实现此功能！";
    }

    @PostMapping("/delete")
    public String delete() {
        return  "接收到【删除管理员】的请求，但是，服务器端尚未实现此功能！";
    }

    @PostMapping("/update")
    @PreAuthorize("hasAuthority('/ams/admin/update')")
    public String update(@AuthenticationPrincipal @ApiIgnore AdminDetails adminDetails) {
        log.debug("当事人的ID：{}", adminDetails.getId());
        return "接收到【修改管理员】的请求，但是，服务器端尚未实现此功能！";
    }

    @GetMapping("/{id:[0-9]+}")
    public String getStandardById(@PathVariable Long id) {
        return  "接收到【查询管理员，ID=" + id + "】的请求，但是，服务器端尚未实现此功能！";
    }

    @GetMapping("")
    @PreAuthorize("hasAuthority('/ams/admin/read')")
    public String list(@AuthenticationPrincipal @ApiIgnore AdminDetails adminDetails) {
        log.debug("当事人的ID：{}", adminDetails.getId());
        log.debug("当事人的用户名：{}",adminDetails.getUsername());
        return  "接收到【查询管理员列表】的请求，但是，服务器端尚未实现此功能！";
    }
}